#ifndef ITEM_H
#define ITEM_H

#include "Labeled.h"
#include "Metric_Object.h"

// An item in a metric space, which also has attributes
// from the Labeled class.
//
// Currently known subclasses:
//
// Item_Word:   a string, metric = edit distance.
// Item_Gene:   CGAT sequence, metric = #base-pair differences
// Item_Point:  n-dimensional point, metric = Euclidean distance
// Item_Point2: 2-dimensional point, metric = Euclidean distance
// Item_Cluster: a meta-item, metric = various inter-cluster distances

class Item : public Metric_Object, public Labeled {
public:
    virtual std::ostream& print(std::ostream& os) const = 0;
};

#endif
